#ifndef __COM_TYPES_H__
#define __COM_TYPES_H__
#include "gpio.h"

// LED结构体
typedef struct {
    GPIO_TypeDef *port;
    uint16_t pin;
    uint32_t last_blink_tick;
} LED_Struct;

// 遥控连接状态
typedef enum {
    CONNECTED,
    UNCONNECTED
} Remote_Status;

// 飞机工作状态
typedef enum {
    IDEL,
    NORMAL,
    FIX_HEIGHT,
    FAULT
} Flight_Status;

// 电机结构体
typedef struct {
    TIM_HandleTypeDef *htim;
    uint32_t channel;
    int16_t speed;
} Motor_Struct;

typedef enum {
    Com_SUCCESS,
    Com_FAIL
} Com_Type;

// 遥控数据
typedef struct {
    int16_t THR;        // 油门
    int16_t YAW;        // 偏航
    int16_t PIT;        // 俯仰
    int16_t ROL;        // 横滚
    uint8_t fix_height; // 定高信号 1:定高/取消定高 0:保持当前状态
    uint8_t power_down; // 关机信号 1:关机 0:保持当前状态
} Remote_Struct;

// 油门状态
typedef enum {
    FREE,
    MAX,
    LEAVE_MAX,
    MIN,
    UNLOCK
} THR_Status;

// 加速度结构体
typedef struct {
    int16_t x;
    int16_t y;
    int16_t z;
} Accel_Struct;

// 角速度结构体
typedef struct {
    int16_t x;
    int16_t y;
    int16_t z;
} Gyro_Struct;

// 六轴结构体
typedef struct {
    Accel_Struct accel;
    Gyro_Struct gyro;
} AccelGyro_Struct;

// 欧拉角结构体
typedef struct {
    float pitch;
    float yaw;
    float roll;
} EulerAngle_Struct;

// PID 结构体
typedef struct {
    float kp;
    float ki;
    float kd;
    float desire;
    float measure;
    float output;
    float integral;
    float last_error;
} PID_Struct;

#endif /* __COM_TYPES_H__ */